"""客户端"""

"""jupyter notebook中，不利于实验网络编程代码，请将下面代码复制到 Pycharm 中进行展示："""

from socket import *
from threading import Thread

def recv_data():
    """接收信息"""
    
    while True:
        # 程序挂起，等待接收数据
        recv_data = client_socket.recv(1024)  # 最大接收1024字节
        
        # 解码，获取信息
        recv_content = recv_data.decode('gbk')
        print(f"服务器端说: {recv_content}")
        
        # 如果接收的信息是 end，则不再接收信息
        if recv_content == "end":
            print("结束接收消息")
            break

def send_data():
    """发送信息"""
    
    while True:
        # 给服务端发消息
        msg = input("请输入：\n")
        client_socket.send(msg.encode("gbk"))
        
        # 如果发送的信息是 end，则不再发送信息
        if msg == "end":
            break

if __name__ == '__main__':
    
    # 创建 TCP套接字
    client_socket = socket(AF_INET, SOCK_STREAM)
    
    # 建立连接
    client_socket.connect(("127.0.0.1", # 连接到的 IP地址
                           8899)) # 信息发送到的 端口号

    # 创建 两个线程 -- 一个负责发送信息，一个负责接收信息
    t1 = Thread(target=recv_data)
    t2 = Thread(target=send_data)
    
    # 启动线程
    t1.start()
    t2.start()
    
    # 等待子线程结束，主线程才结束
    t1.join()
    t2.join()

    # 关闭
    client_socket.close()